﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.IO;
using System.Collections.ObjectModel;
using MineLaunch.ListItem;

namespace MineLaunch.Windows
{
	/// <summary>
	/// ModManagerWindow.xaml の相互作用ロジック
	/// </summary>
	public partial class ModManagerWindow : Window
	{
		public ObservableCollection<ModsListItem> ModsList = new ObservableCollection<ModsListItem>();
		public string ModLoaderConfigPath = "";

		public ModManagerWindow(string mlConfigPath)
		{
			InitializeComponent();
			this.ModLoaderConfigPath = mlConfigPath;
		}

		private void Window_SourceInitialized(object sender, EventArgs e)
		{
			this.modsListBox.DataContext = ModsList;
			LoadConfig();
		}

		private void OKButton_Click(object sender, RoutedEventArgs e)
		{
			SaveConfig();
		}

		private void LoadConfig()
		{
			if (!File.Exists(ModLoaderConfigPath))
			{
				return;
			}
			string[] configs = File.ReadAllLines(ModLoaderConfigPath);
			for (int i = 0; i < configs.Length; i++)
			{
				string config = configs[i];
				if (config.StartsWith("#")) continue; //コンフィグが#で始まってたら無視する
				if (!config.StartsWith("mod_")) continue; //コンフィグがmod_で始まってなかったら無視する
				string modName = config.Split('=')[0];
				bool value = config.Split('=')[1] == "on";

				var modItem = new ModsListItem();
				modItem.Content = modName.Substring(4);
				modItem.ModName = modName;
				modItem.IsChecked = value;

				ModsList.Add(modItem);
			}
		}

		private void SaveConfig()
		{
			if (!File.Exists(ModLoaderConfigPath))
			{
				return;
			}
			string configContent = "";
			StringBuilder builder = new StringBuilder();
			string[] configs = File.ReadAllLines(ModLoaderConfigPath);
			for (int i = 0; i < configs.Length; i++)
			{
				string config = configs[i];
				//コンフィグが#で始まっているコメント文、または、
				//mods_で始まっていないMod以外の設定の場合はそのまま書き込む。
				if (config.StartsWith("#") || !config.StartsWith("mod_"))
				{
					builder.Append(config).Append("\n");
				}
			}
			for (int i = 0; i < ModsList.Count(); i++)
			{
				//MODリストの設定を書き込む
				string value = ModsList[i].IsChecked ? "on" : "off";
				builder.Append(ModsList[i].ModName).Append("=").Append(value).Append("\n");
			}
			configContent = builder.ToString();
			File.WriteAllText(ModLoaderConfigPath, configContent);

			this.DialogResult = true;
		}
	}
}
